import { message } from 'ant-design-vue';
import { AxiosRequestConfig, AxiosResponse } from 'axios';
import service from './service';
import { getApiUrl, getModuleApiUrl, ApiModule, API_CONFIG } from './config';

export interface IAxiosResponse<T> extends AxiosResponse {
	status: number;
	data: T;
	message?: string;
	error?: string;
	[key: string]: any;
}
const env = import.meta.env.DEV;

export interface RequestConfig extends AxiosRequestConfig {
	closeErrorMessage?: boolean;
	successStatusCheckValue?: number | 'none';
	header?: Record<string, any>;
}

/**
 * GET 请求方法
 * 示例: GET('edit', { name: 'test' })
 * 使用模块: GET('edit', { name: 'test' }, { module: ApiModule.USER })
 * 自定义配置: GET('edit', { name: 'test' }, { baseUrl: 'custom-url' })
 * 
 * @param url 接口路径
 * @param params 请求参数
 * @param config 额外配置
 * @returns Promise 对象
 */
export function GET<T, K = any>(
	url: string, 
	params?: T, 
	config?: AxiosRequestConfig & { module?: ApiModule; headers?: Record<string, any> }
): Promise<IAxiosResponse<K>> {
	// 处理模块化路径
	let fullUrl = url;
	if (config?.module) {
		fullUrl = getModuleApiUrl(config.module, url);
		
		// 提取非axios标准配置
		const { module, ...restConfig } = config;
		config = restConfig;
	}

	return service.get<K>(fullUrl, { ...config, params }).catch(error => {
		if (env) {
			console.error('GET接口请求异常。下面是请求参数和异常信息：');
			console.error(url);
			console.error(error);
		}

		if (error.response?.status === 400) {
			// 刷新频率过高
			message.error(`${error.response?.data?.message || '请求失败，请重试'}`);
		} else {
			message.error(`${(error && (error.error || error.message || error.msg)) || '请求失败，请重试'}`);
		}
		return Promise.reject(error);
	});
}

/**
 * POST 请求方法
 * 示例: POST('edit', { name: 'test' })
 * 使用模块: POST('edit', { name: 'test' }, { module: ApiModule.USER })
 * 自定义配置: POST('edit', { name: 'test' }, { params: { id: 2 } })
 * 
 * @param url 接口路径
 * @param data 请求体数据
 * @param config 额外配置
 * @returns Promise 对象
 */
export function POST<T, K = any>(
	url: string, 
	data?: T, 
	config?: AxiosRequestConfig & { module?: ApiModule; headers?: Record<string, any> }
): Promise<IAxiosResponse<K>> {
	// 处理模块化路径
	let fullUrl = url;
	if (config?.module) {
		fullUrl = getModuleApiUrl(config.module, url);
		
		// 提取非axios标准配置
		const { module, ...restConfig } = config;
		config = restConfig;
	}

	return service.post<K>(fullUrl, data, config).catch(error => {
		if (env) {
			console.error('POST接口请求异常。下面是请求参数和异常信息：');
			console.error(url);
			console.error(error);
		}

		if (error.response?.status === 400) {
			// 刷新频率过高
			message.error(`${error.response?.data?.message || '请求失败，请重试'}`);
		} else {
			message.error(`${(error && (error.error || error.message || error.msg)) || '请求失败，请重试'}`);
		}
		return Promise.reject(error);
	});
}
